<?php

class AnotacaoController extends Controller {

    /**
     * @final   pacote das views deste controller
     */
    const PACKAGE_VIEW = 'anotacao';

    /**
     * @var AnotacaoService
     */
    private $anotacaoService;

    public function __construct() {
        $this->anotacaoService = AnotacaoService::getInstance();
    }

    public function cadastrar() {
        $this->view('cadastrar', self::PACKAGE_VIEW);
    }

    public function inserir() {
        $ArDados = $_POST;
        multipleEntities($ArDados);

        if( empty($ArDados['StTitulo']) ) {
            $this->saveReturn('O campo "Título" não foi recebido.');
        } else if( empty($ArDados['TxAnotacao']) ) {
            $this->saveReturn('O campo "Conteúdo" não foi recebido.');
        }

        if( !$this->hasReturn() ) {
            if( $this->anotacaoService->save($ArDados) ) {
                $this->saveReturn('Anotação criada com sucesso!', 1);
            } else {
                $this->saveReturn('Ocorreu um erro ao salvar a anotação');
            }
        }

        $this->showJsonResponse();
    }

    public function editar() {
        $IDAnotacao = treatUrl('id');
        multipleEntities($IDAnotacao);

        $Anotacao = $this->anotacaoService->findById($IDAnotacao);
        if( empty($Anotacao) || !$this->anotacaoService->isMine($IDAnotacao) ) {
            redirect('ferramenta', 'listar-anotacoes');
        }

        $this->save(SESSION_INTERFACE, 'Note', $Anotacao);
        $this->view('editar', self::PACKAGE_VIEW);
    }

    public function atualizar() {
        $ArDados = $_POST;
        multipleEntities($ArDados);

        if( empty($ArDados['StTitulo']) ) {
            $this->saveReturn('O campo "Título" não foi recebido.');
        } else if( empty($ArDados['TxAnotacao']) ) {
            $this->saveReturn('O campo "Conteúdo" não foi recebido.');
        } else if( empty($ArDados['IDAnotacao']) ) {
            $this->saveReturn('O campo identificador não foi recebido.');
        } else if( !$this->anotacaoService->isMine($ArDados['IDAnotacao']) ) {
            $this->saveReturn('Trapaceando?? Não mecha em anotação que não é sua!');
        }

        if( !$this->hasReturn() ) {
            if( $this->anotacaoService->update($ArDados) ) {
                $this->saveReturn('Anotação criada com sucesso!', 1);
            } else {
                $this->saveReturn('Ocorreu um erro ao salvar a anotação');
            }
        }

        $this->showJsonResponse();
    }

    public function deletar() {
        $ArDados = $_POST;
        multipleEntities($ArDados);

        if( empty($ArDados['IDAnotacao']) ) {
            $this->saveReturn('Anotação a ser excluída não foi recebida');
        } else if( !$this->anotacaoService->isMine($ArDados['IDAnotacao']) ) {
            $this->saveReturn('Trapaceando?? Não mecha em anotação que não é sua!');
        }

        if( !$this->hasReturn() ) {
            if( $this->anotacaoService->delete($ArDados['IDAnotacao']) ) {
                $this->saveReturn('Anotação excluida com sucesso!', 1);
            } else {
                $this->saveReturn('Ocorreu um erro ao excluir a anotação');
            }
        }

        $this->showJsonResponse();
    }

    public function visualizar() {
        $IDAnotacao = treatUrl('id');
        multipleEntities($IDAnotacao);

        $Anotacao = $this->anotacaoService->findById($IDAnotacao);
        if( empty($Anotacao) || !$this->anotacaoService->isMine($IDAnotacao) ) {
            redirect('ferramenta', 'listar-anotacoes');
        }

        $this->save(SESSION_INTERFACE, 'Note', $Anotacao);
        $this->view('visualizar', self::PACKAGE_VIEW);
    }

}

?>
